package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.DTO.property.PropertyProjectRemoveUnitInfoDTO;
import com.itlong.cloud.POJO.VO.property.PropertyPadGetOneVO;
import com.itlong.cloud.POJO.VO.property.PropertyPadListVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <desc>
 *      平板业务处理数据访问接口
 * </desc>
 *
 * @createDate 2019/01/17
 */
@Mapper
@Repository
public interface IPropertyPadDao {
    /**
     * <desc>
     *      保存平板
     * </desc>
     *
     * @param params 数据参数
     * @return
     * @author Jiaqi.X
     * @createDate 2019/01/17
     */
    Integer save(Map<String, Object> params);

    /**
     * <desc>
     *      修改平板
     * </desc>
     *
     * @param params 数据参数
     * @return
     * @author Jiaqi.X
     * @createDate 2019/01/17
     */
    Integer update(Map<String, Object> params);

    /**
     * <desc>
     *      获取分页列表
     * </desc>
     *
     * @param params
     * @return
     * @author Jiaqi.X
     * @createDate 2019/01/17
     */
    List<PropertyPadListVO> getPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取分页列表总条数
     * </desc>
     *
     * @param params
     * @return
     * @author Jiaqi.X
     * @createDate 2019/01/17
     */
    Integer getPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      删除平板
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/01/17
     */
    Integer delete(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      检测平板是否重复
     * </desc>
     *
     * @param projectId
     * @param deviceId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/01/17
     */
    Integer checkPadDeviceRepeat(@Param("projectId") String projectId,
                                 @Param("deviceId") String deviceId,
                                 @Param("type") Integer type);

    /**
     * <desc>
     *      批量插入平板绑定地址
     * </desc>
     *
     * @param list
     * @return
     * @auhtor Jiaqi.X
     * @createDate 2019/01/17
     */
    Integer batchSaveAddress(List<Map<String, Object>> list);

    /**
     * <desc>
     *      删除平板地址
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/01/17
     */
    Integer deletePadAddress(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取单个平板对象
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/01/17
     */
    PropertyPadGetOneVO getOne(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      删除平板设备归属地址
     * </desc>
     *
     * @param propertyProjectRemoveUnitInfoDTO  删除单元信息数据传输对象
     * @return Integer  返回删除数量
     * @author wangzhi
     * @createDate 2019/01/24
     */
    Integer deleteByAddress(PropertyProjectRemoveUnitInfoDTO propertyProjectRemoveUnitInfoDTO);

    /**
     * <desc>
     *      查询设备序列号，根据地址信息
     * </desc>
     *
     * @param propertyProjectRemoveUnitInfoDTO 删除单元信息数据传输对象
     * @return 设备序列号列表
     * @author wangzhi
     * @createDate 2019/02/13
     */
    List<String> getDeviceUniqueByAddress(PropertyProjectRemoveUnitInfoDTO propertyProjectRemoveUnitInfoDTO);

    /**
     * <desc>
     *      查询平板的地址信息
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/02/13
     */
    Map<String,Object> selectPadAddress(String deviceUnique);

    /**
     * <desc>
     *      获取平板设备编号及绑定的设备编号
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @Author Zhu.yj
     * @createDate  2019/12/17
     */
    List<String> getPadDeviceInfo(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据平板设备编号获取绑定的设备编号
     * </desc>
     *
     * @param deviceUniqueList 平板设备编号
     * @return
     * @Author Zhu.yj
     * @createDate  2019/12/17
     */
    List<Map<String, Object>> getBindDeviceUniqueByPad(@Param("deviceUniqueList") List<String> deviceUniqueList);

    /**
     * <desc>
     *      获取设备地址
     * </desc>
     *
     * @param elevatorDeviceUniqueList 电梯设备编号集合
     * @return
     * @Author Zhu.yj
     * @createDate  2019/12/17
     */
    List<String> getPadAddressByElevator(@Param("elevatorDeviceUniqueList") List<String> elevatorDeviceUniqueList);

    /**
     * <desc>
     *      根据门禁获取设备地址
     * </desc>
     *
     * @param entranceDeviceUnitList
     * @return
     * @Author Zhu.yj
     * @createDate  2020/1/2
     */
    List<String> getPadAddressByEntrance(@Param("entranceDeviceUnitList") List<String> entranceDeviceUnitList);

    /**
     * <desc>
     *      根据unitId找出buildId
     * </desc>
     *
     * @param addUnitList 单元id集合
     * @return
     * @Author Zhu.yj
     * @createDate  2019/12/18
     */
    List<Map<String, Object>> getBuildIdsByUnitIds(@Param("addUnitList") Set<String> addUnitList);

    /**
     * <desc>
     *      根据设备唯一编码判断特殊人脸平板设备信息表中是否有该设备
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate 2020/12/22
     */
    Integer isExistInSpecialPad(@Param("deviceUnique")String deviceUnique);

    /**
     * <desc>
     *      根据设备唯一编码删除特殊人脸平板设备信息表中的设备信息
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate 2020/12/22
     */
    Integer deleteSpecialPadByDeviceUnique(@Param("deviceUnique")String deviceUnique);

}
